CentOS8 配置apache 搭建静态网站 踩坑向

您所在的位置:网站首页 centos8 安装Apache CentOS8 配置apache 搭建静态网站 踩坑向

CentOS8 配置apache 搭建静态网站 踩坑向

2023-08-13 01:16| 来源: 网络整理| 查看: 265

apache服务器安装与配置 apache简介apache安装挂载光盘设备系统镜像创建yum仓库配置文件安装apache服务下载使用阿里云CentOS-8.repo软件仓库修改 CentOS-Base.repo文件安装成功启动httpd同时设置为开机自启效果图 踩坑经验 配置服务文件参数虚拟主机功能基于IP地址部署多个网站创建网站数据存放目录虚拟机创建三个IP地址查看本机网卡信息 配置网卡文件测试IP地址连通性IP地址1IP地址2IP地址3 配置httpd服务文件设置网站数据目录SELinux安全上下文结果展示 基于主机域名配置多个网站手工定义IP地址与域名对应关系的配置文件查看域名是否成功解析 创建三个保存网站数据的目录编辑httpd服务配置文件修改网站数据目录文件安全上下文结果展示 基于端口号部署多个网站创建保存多个网站数据的目录httpd服务添加多个监听端口httpd服务虚拟主机网站参数添加端口号设置SELinux安全上下文SELinux添加端口号允许与httpd相关的端口号结果展示 apache访问控制 目前能够提供web网络服务的程序有IIS、Nginx和Apache等。IIS是windows系统中默认的web服务程序,其他为linux或者unix系统上的web服务程序。

apache简介

apache程序是目前拥有很高的市场占有率的web服务程序之一,其跨平台和安全性广泛被认可且拥有快速、可靠、简单的API扩展。apache是RHEL7系统中默认的web服务程序。

apache安装

在安装前,根据不同的安装方式选择不同的安装方法。在本例中,使用光盘系统镜像的方法安装apache。因为apache是centos8中默认的web服务程序,所以在iso系统安装文件内存在apache软件。因此可以直接使用系统镜像安装。

挂载光盘设备系统镜像 先创建文件夹专门挂载系统镜像挂载系统镜像在创建的文件夹中 [root@MyCentOS ~]# mkdir -p /media/cdrom ///-p参数表示迭代创建文件夹 [root@MyCentOS ~]# mount /dev/cdrom /media/cdrom ///挂载系统镜像到创建的文件夹 创建yum仓库配置文件 [root@MyCentOS ~]# vim /etc/yum.repos.d/httpd.repo [httpd] ///仓库唯一标识符 name=httpd ///仓库名称描述,识别仓库用处 baseurl=file:///media/cdrom ////提供方式包括FTP(ftp://..)、HTTP(http://..)、本地(file://..)当使用网络安装时,填写网络下载//地址即可 enable=1 //是否可用(可用) gpgcheck=0 //是否校验(不校验) 安装apache服务 [root@MyCentOS ~]# yum install httpd - Curl error (37): Couldn't read a file:// file for file:///media/cdrom/repodata/repomd.xml [Couldn \'t open file /media/cdrom/repodata/repomd.xml] 错误:Failed to download metadata for repo 'httpd': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried

产生错误,无法读取repomd.xml文件。在网上查找多篇文章,均是没有挂载文件导致的,没有解决我的问题。最后在参考了一篇文章之后,先下载使用阿里云的CentOS-8.repo软件仓库 。

下载使用阿里云CentOS-8.repo软件仓库 [root@MyCentOS ~ yum.repos.d]# wget http://mirrors.aliyun.com/repo/Centos-8.repo [root@MyCentOS ~ yum.repos.d]# yum clean all ///清除yum缓存 [root@MyCentOS ~ yum.repos.d]# yum makecache ///将服bai务器上的软件包信息 现在本地缓存du,以提高 搜索 安装软件的速度

将阿里云centos8的软件仓库下载至/etc/yum.repos.d/文件夹下。此时再执行yum install httpd命令发现还是出现之前的错误。

修改 CentOS-Base.repo文件 [root@MyCentOS ~ yum.repos.d]# vim Centos-8.repo enabled=0 /////将该项参数改为0,将此源改为禁用,或者删除这个文件也可以达到同样的效果 安装成功 [root@MyCentOS yum.repos.d]# yum install httpd yum install httpd Repository AppStream is listed more than once in the configuration Repository extras is listed more than once in the configuration Repository PowerTools is listed more than once in the configuration Repository centosplus is listed more than once in the configuration 上次元数据过期检查:0:00:14 前,执行于 2020年08月07日 星期五 20时18分58秒。 依赖关系解决。 .........省略输出........ 已安装: apr-1.6.3-9.el8.x86_64 apr-util-1.6.1-6.el8.x86_64 apr-util-bdb-1.6.1-6.el8.x86_64 apr-util-openssl-1.6.1-6.el8.x86_64 centos-logos-httpd-80.5-2.el8.noarch httpd-2.4.37-21.module_el8.2.0+382+15b0afa8.x86_64 httpd-filesystem-2.4.37-21.module_el8.2.0+382+15b0afa8.noarch httpd-tools-2.4.37-21.module_el8.2.0+382+15b0afa8.x86_64 mod_http2-1.11.3-3.module_el8.2.0+307+4d18d695.x86_64 完毕! 启动httpd同时设置为开机自启 [root@MyCentOS ]# systemctl start httpd [root@MyCentOS ]# systemctl enable httpd 效果图

在这里插入图片描述

踩坑经验

刚开始一直按照书上的操作,本地下载httpd,但是一直未能成功。看了其他人的安装踩坑经验,觉得可能是虚拟机与实际主机网络的连接方式有关。开始一直在使用书上说的自己创建软件仓库,安装httpd,后来不行就换了网易163的镜像仓库源,然后又用了阿里云的镜像仓库源。导致在服务器上存在重复的软件仓库,同时自行创建的httpd仓库一直和阿里云的镜像源、网易163的镜像源产生冲突。个人见解:

可能,如果自行创建了软件仓库,则系统会优先使用自行创建的软件仓库源。阿里云的镜像源和网易163镜像源只要留一个就行了。最好将系统自带的CentOS-Base.repo软件仓库设置为不可用,或者直接删除,最好设置为不可用,以防以后还要用到。如果以后需要安装热门软件,同时能在线安装的话,装好阿里云镜像源,直接 yum install xxx 就行了不用自己创建软件仓库。网易163的镜像源地址有时候会更新导致安装失败,又查不到问题。 配置服务文件参数

-------------------------------------------------------linux系统中的配置文件--------------------------------------------------

配置文件名称存放位置服务目录/etc/httpd主配置文件/etc/httpd/conf/httpd.conf网站数据目录/var/www/html访问日志/var/log/httpd/access_log错误日志/var/log/httpd/error_log

--------------------------------------------------配置httpd服务常用参数及用途----------------------------------------------

参数用途ServerRoot服务目录ServerAdmin管理员邮箱User运行服务的用户Group运行服务的用户组ServerName网站服务器的域名DocumentRoot网站数据目录Directory网站数据目录的权限Listen监听的IP地址与端口号DirectoryIndex默认的索引页页面ErrorLog错误日志文件CustomLog访问日志文件Timeout网页超时实践,默认为300秒 虚拟主机功能

之前部署网站时在一个服务器上只能部署一个网站,资源利用不够充分,因此使用虚拟主机功能能在一台主机上部署多个网站,降低建设成本。 功能: 利用虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个“虚拟的服务器”。但是无法实现硬件资源隔离。 apache虚拟主机功能: 是服务器基于用户请求的不同IP地址、主机域名或端口奥,实现提供多个网站同时为外部提供访问服务的技术。

基于IP地址部署多个网站

如果一台服务器有多个IP地址,而且每个IP地址与服务器上部署的每个网站一 一对应,则用户请求访问不同IP地址时,就能访问到不同网站上的资源。 以部署两个网站为例

创建网站数据存放目录

在SELinux子系统初探中,将/home/wwwroot设置为了网站数据存放路径。所以在该路径下创建两个文件夹,分别存放三个网站的网站数据。

[yan@MyCentOS wwwroot]$ ll 总用量 0 drwxrwxr-x. 2 yan yan 24 8月 9 10:14 first drwxrwxr-x. 2 yan yan 24 8月 9 10:15 second drwxrwxr-x. 2 yan yan 24 8月 9 10:16 third 虚拟机创建三个IP地址

配置网卡有两种方法,分别为直接编辑在/etc/sysconfig/network-scripts路径下的本机网卡文件或者使用nmtui命令。

查看本机网卡信息 [root@MyCentOS]# nmcli connection show NAME UUID TYPE DEVICE ens33 5861a166-80d9-4390-bcb6-922e870be1f0 ethernet ens33 virbr0 c90f02ea-100a-4754-9b41-c54768c7eec8 bridge virbr0 company de8266c9-608e-405c-99a9-b19a604894e0 ethernet -- house c42775b6-1af7-4cd4-b59e-9eba6f0691a9 ethernet --

我的主机网卡文件为ens33。所以编辑/etc/sysconfig/network-scripts下的ifcfg-ens33网卡文件。 查看本机网关地址,使用route -n查看网关及IP地址。

[root@MyCentOS network-scripts]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.127.2 0.0.0.0 UG 100 0 0 ens33 《《《《网关地址 192.168.10.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 192.168.10.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 192.168.10.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0 192.168.127.2 0.0.0.0 255.255.255.255 UH 100 0 0 ens33 配置网卡文件

如下所示。

[root@MyCentOS network-scripts]# vim ifcfg-ens33 HWADDR=00:0C:29:E6:75:0B TYPE=Ethernet BOOTPROTO=static 《《《《《《《关键点1:将DHCP修改为static,地址分配模式设置为静态手动指定,不自动获取 DEFROUTE=yes PEERDNS=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=5861a166-80d9-4390-bcb6-922e870be1f0 ONBOOT=yes 《《《《《《 设置为开机自动启动 IPADDR=192.168.10.10 《《ip地址1 PREFIX=24 IPADDR1=192.168.10.20 《《《《IP地址2 PREFIX1=24 IPADDR2=192.168.10.30 《《《《IP地址3 PREFIX2=24 GATEWAY=192.168.127.2 《《《《 本机网关 DNS1=114.114.114.114 《《《《指定DNS服务器地址1 DNS2=8.8.8.8 《《《《指定DNS服务器地址2 测试IP地址连通性 IP地址1 [root@MyCentOS network-scripts]# ping -c 4 192.168.10.10 PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data. 64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.094 ms 64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.043 ms 64 bytes from 192.168.10.10: icmp_seq=3 ttl=64 time=0.042 ms 64 bytes from 192.168.10.10: icmp_seq=4 ttl=64 time=0.063 ms --- 192.168.10.10 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 69ms rtt min/avg/max/mdev = 0.042/0.060/0.094/0.022 ms IP地址2 [root@MyCentOS network-scripts]# ping -c 4 192.168.10.20 PING 192.168.10.20 (192.168.10.20) 56(84) bytes of data. 64 bytes from 192.168.10.20: icmp_seq=1 ttl=64 time=0.048 ms 64 bytes from 192.168.10.20: icmp_seq=2 ttl=64 time=0.184 ms 64 bytes from 192.168.10.20: icmp_seq=3 ttl=64 time=0.057 ms 64 bytes from 192.168.10.20: icmp_seq=4 ttl=64 time=0.058 ms --- 192.168.10.20 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 113ms rtt min/avg/max/mdev = 0.048/0.086/0.184/0.057 ms IP地址3 [root@MyCentOS network-scripts]# ping -c 4 192.168.10.30 PING 192.168.10.30 (192.168.10.30) 56(84) bytes of data. 64 bytes from 192.168.10.30: icmp_seq=1 ttl=64 time=0.044 ms 64 bytes from 192.168.10.30: icmp_seq=2 ttl=64 time=0.083 ms 64 bytes from 192.168.10.30: icmp_seq=3 ttl=64 time=0.083 ms 64 bytes from 192.168.10.30: icmp_seq=4 ttl=64 time=0.078 ms --- 192.168.10.30 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 96ms rtt min/avg/max/mdev = 0.044/0.072/0.083/0.016 ms

bingo!!! 现在在我们主机上拥有3个内网IP地址。接下来通过,三个IP地址,配置三个网站。

配置httpd服务文件

在/etc/httpd/conf/httpd.conf中修改参数,其中VirtualHost参数表示虚拟主机功能。 第一段话翻译: 请注意,从这一点开始,您必须特别允许启用某些特性——因此,如果某些特性不像您预期的那样工作,请确保您在下面特别启用了它。

[root@MyCentOS conf]# vim httpd.conf # Note that from this point forward you must specifically allow # particular features to be enabled - so if something's not working as # you might expect, make sure that you have specifically enabled it # below. # #虚拟主机IP1 DocumentRoot /home/wwwroot/first ServerName www.boomshakaraka.com AllowOverride None Require all granted #虚拟主机IP2 DocumentRoot /home/wwwroot/second ServerName www.boomsha.com AllowOverride None Require all granted #虚拟主机IP3 DocumentRoot /home/wwwroot/third ServerName www.boom.com AllowOverride None Require all granted 设置网站数据目录SELinux安全上下文

在SElinux安全子系统初探一文中,我们修改了网站数据存储路径为/home/wwwroot。现在我们要在该目录下创建的三个文件夹作为三个网站的网站数据存放文件。正如之前修改网站数据存放路径一样,现在也需要分别对三个网站数据文件目录设置SELinux安全上下文。

[root@MyCentOS conf]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot ValueError: /home/wwwroot 的文件上下文已定义 [root@MyCentOS conf]# semanage fcontext -a -t httpd_sys_content_t /home/yang/wwwroot [root@MyCentOS conf]# semanage fcontext -a -t httpd_sys_content_t /home/yang/wwwroot/first [root@MyCentOS conf]# semanage fcontext -a -t httpd_sys_content_t /home/yang/wwwroot/first/* [root@MyCentOS conf]# semanage fcontext -a -t httpd_sys_content_t /home/yang/wwwroot/second [root@MyCentOS conf]# semanage fcontext -a -t httpd_sys_content_t /home/yang/wwwroot/second/* [root@MyCentOS conf]# semanage fcontext -a -t httpd_sys_content_t /home/yang/wwwroot/third [root@MyCentOS conf]# semanage fcontext -a -t httpd_sys_content_t /home/yang/wwwroot/third/* [root@MyCentOS conf]# restorecon -Rv /home/yang/wwwroot Relabeled /home/yang/wwwroot from unconfined_u:object_r:user_home_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0 Relabeled /home/yang/wwwroot/first from unconfined_u:object_r:user_home_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0 Relabeled /home/yang/wwwroot/first/index.html from unconfined_u:object_r:user_home_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0 Relabeled /home/yang/wwwroot/second from unconfined_u:object_r:user_home_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0 Relabeled /home/yang/wwwroot/second/index.html from unconfined_u:object_r:user_home_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0 Relabeled /home/yang/wwwroot/third from unconfined_u:object_r:user_home_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0 Relabeled /home/yang/wwwroot/third/index.html from unconfined_u:object_r:user_home_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0 结果展示

第一个网站 在这里插入图片描述

第二个网站 在这里插入图片描述 第三个网站 在这里插入图片描述

基于主机域名配置多个网站

基于主机域名配置多个网站的原理及流程如下图所示。 在这里插入图片描述

当只有一个IP地址时,可以让Apache自动识别用户请求的域名,从而根据不同的域名传输不同的内容。如果没有配置DNS解析服务,则可以使用手工定义IP地址与域名之间对应关系。在/etc/hosts是linux系统中用于强制把某个主机域名解析到指定IP的配置文件。

手工定义IP地址与域名对应关系的配置文件

首先,将IP地址还原为只有一个。即编辑ifcfg-ens33文件将其中多余的IP地址注释,同时注释DNS地址。再使用ip addr查看当下主机IP地址。如下所示。

[root@MyCentOS ~]# ip addr 2: ens33: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:e6:75:0b brd ff:ff:ff:ff:ff:ff inet 192.168.10.10/24 brd 192.168.10.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::b4ec:5340:9b56:19bb/64 scope link noprefixroute valid_lft forever preferred_lft forever

手工定义IP地址与域名之间对应关系的配置文件。

[root@MyCentOS ~]# vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.10.10 www.boomshakaraka.com wwww.boomsha.com wwww.boom.com 查看域名是否成功解析 [root@MyCentOS ~]# ping -c 4 www.boom.com PING www.boom.com (42.200.23.6) 56(84) bytes of data. 64 bytes from 42-200-23-6.static.imsbiz.com (42.200.23.6): icmp_seq=1 ttl=128 time=42.9 ms 64 bytes from 42-200-23-6.static.imsbiz.com (42.200.23.6): icmp_seq=2 ttl=128 time=42.3 ms 64 bytes from 42-200-23-6.static.imsbiz.com (42.200.23.6): icmp_seq=3 ttl=128 time=42.5 ms 64 bytes from 42-200-23-6.static.imsbiz.com (42.200.23.6): icmp_seq=4 ttl=128 time=42.9 ms --- www.boom.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 175ms rtt min/avg/max/mdev = 42.329/42.656/42.929/0.289 ms 创建三个保存网站数据的目录

因为前面创建了,所以这一步省略。

编辑httpd服务配置文件

与上一个基于IP地址配置httpd服务的步骤相似,只需将中的IP地址改为主机的IP地址即可。

[root@MyCentOS ~]# vim /etc/httpd/conf/httpd.conf #虚拟主机IP1 DocumentRoot /home/yan/wwwroot/first ServerName www.boomshakaraka.com AllowOverride None Require all granted #虚拟主机IP2 DocumentRoot /home/yan/wwwroot/second ServerName www.boomsha.com AllowOverride None Require all granted #虚拟主机IP3 DocumentRoot /home/yan/wwwroot/third ServerName www.boom.com AllowOverride None Require all granted 修改网站数据目录文件安全上下文

因为再基于IP地址部署多个网站的实验中,成功配置了网站数据的SELinux安全上下文。详情见上文。在修改完网站数据目录SElinux安全上下文后,需重启httpd服务。

结果展示

第一个域名网站 在这里插入图片描述

第二个域名网站 在这里插入图片描述

第三个域名网站 在这里插入图片描述

基于端口号部署多个网站 创建保存多个网站数据的目录

省略。。。。。。,详情见基于IP地址部署多个网站

httpd服务添加多个监听端口 [root@MyCentOS ~]# vim /etc/httpd/conf/httpd.conf #Listen 12.34.56.78:80 Listen 80 Listen 7123 Listen 7124 Listen 7125 httpd服务虚拟主机网站参数添加端口号 [root@MyCentOS ~]# vim /etc/httpd/conf/httpd.conf #虚拟主机IP1 《《《关键点 DocumentRoot /home/yang/wwwroot/first ServerName www.boomshakaraka.com AllowOverride None Require all granted #虚拟主机IP2 DocumentRoot /home/yang/wwwroot/second ServerName www.boomshak.com AllowOverride None Require all granted #虚拟主机IP3 DocumentRoot /home/yang/wwwroot/third ServerName www.boomsh.com AllowOverride None Require all granted 设置SELinux安全上下文

省略,详情见基于IP地址部署多个网站实验。

SELinux添加端口号允许与httpd相关的端口号 [root@MyCentOS ~]# semanage port -a -t http_port_t -p tcp 7123 [root@MyCentOS ~]# semanage port -a -t http_port_t -p tcp 7124 [root@MyCentOS ~]# semanage port -a -t http_port_t -p tcp 7125 [root@MyCentOS ~]# semanage port -l | grep http http_cache_port_t tcp 8080, 8118, 8123, 10001-10010 http_cache_port_t udp 3130 http_port_t tcp 7125, 7124, 7123, 80, 81, 443, 488, 8008, 8009, 8443, 9000 pegasus_http_port_t tcp 5988 pegasus_https_port_t tcp 5989 [root@MyCentOS ~]# systemctl restart httpd

每次设置后最好都重启httpd服务

结果展示

基于7123端口号的网站 在这里插入图片描述 基于7124端口号的网站 在这里插入图片描述

基于7125端口号的网站 在这里插入图片描述

apache访问控制

apache可以基于源主机名、源IP地址或源主机上的浏览器特征等信息对网站上的资源进行访问控制。

Allow指令: 允许某个主机访问服务器上的网站资源Deny指令: 禁止访问Order指令: 定义Allow或Deny指令起作用的顺序匹配原则: 顺序匹配

for example 在httpd的主配置文件中域中添加如下指令

Order allow,deny Allow from 192.168.10.10

表示允许该IP地址的主机进行访问,否则禁止。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3